package com.leetcode;

public class L0002 {
    public static void main(String[] args) {
        ListNode l1 = new ListNode(3);
        l1.next=new ListNode(7);
        ListNode l2 = new ListNode(9);
        l2.next=new ListNode(2);
        ListNode listNode = addTwoNumbers(l1, l2);
        while (listNode!=null){
            System.out.println(listNode.val);
            listNode=listNode.next;
        }

    }
    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head=new ListNode();
        ListNode l3=head;
        while(l1!=null && l2!=null){
            ListNode node=new ListNode((l1.val+l2.val+l3.val>=10)?1:0);
            l3.val=(l3.val+l1.val+l2.val)%10;
            if(l1.next==null && l2.next==null){
                if(node.val==1)
                    l3.next=node;
                return head;
            }
            l3.next=node;
            l3=l3.next;
            l1=l1.next;
            l2=l2.next;
        }

        if(l1!=null)
            l3.next=l1;
        else
            l3.next=l2;
        int temp=0;
        while(l3.next.next!=null){
            temp=l3.val;
            l3.val=(l3.val+l3.next.val)%10;
            l3.next.val=temp+l3.next.val>=10?1:0;
            l3=l3.next;
        }

        if(l3.val+l3.next.val==10){
            l3.val=0;
            l3.next.val=1;
        }else{
            l3.val=l3.val+l3.next.val;
            l3.next=null;
        }
        return  head;
    }
}
 class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }